<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../0js/vue.js"></script>
</head>
<body>

<div id="root">
    <h2>今天天气很好{{info}}, {{i}}</h2>
    <button @click="changeWeather">切换天气</button>
    <!--    <button @click="isHot = !isHot">切换天气</button>-->
</div>

<script type="text/javascript">
    // 阻止vue在启动时生成生产提示
    Vue.config.productionTip = false

    const vm = new Vue({
        el: "#root",
        data: {
            isHot: true,
            i: 0
        },
        computed: {
            info() {
                return this.isHot ? "炎热" : "凉爽"
            }
        },
        methods: {
            changeWeather() {
                this.isHot = !this.isHot
                this.i++

                /*let function1 = new Function("return !vm.isHot");

                console.log(function1())*/
            }
        },
        watch: { // 观察者设计模式， 属性为被观察者， 里面的方法会被封装成观察者
            // info: {}, // 计算属性也可以监视
            isHot1: { // 向这个属性(这个属性是被观察者)注册，成为观察者

                immediate: false, // 上来就通知， false不是的

                // 从设计模式的角度，被观察者会执行自己的update方法， 遍历所有已经注册的被观察者对象的观察者实现的接口的真实对象，通知观察者
                handler(newValue, oldValue) {
                    console.log("isHot被修改了")
                }
            }
        }
    });

    vm.$watch("isHot", (newValue, oldValue) => {
        console.log("isHot被修改了")
    })

</script>
</body>
</html>